class Queue {
  constructor() {
    this.items = [];
  }

  //常用操作

  //rear(后端入队)
  enqueue(el) {
    this.items.push(el);
  }

  //front(前端出队)
  dequeue() {
    return this.items.shift();
  }

  //查看队列队首位置元素
  front() {
    if (this.isEmpty()) {
      throw new Error("队列元素为空");
    }
    return this.items[0];
  }

  //队列的长度
  size() {
    return this.items.length;
  }
  //查看队列是否为空
  isEmpty() {
    return this.size() == 0;
  }
  //查看队列中的所有元素
  toString() {
    return this.items.reduce((acc, curr) => (acc += curr + " "), "");
  }
}

//击鼓传花
//几个朋友围城一圈,开始数数,数到某个数字的人就淘汰掉,最后剩下的人获得游戏胜利
function fn(num, count) {
  const queue = new Queue();
  for (let i = 0; i < count; i++) {
    queue.enqueue(i);
  }
  while (queue.size() > 1) {
    for (let i = 0; i < num; i++) {
      if (i == num - 1) {
        queue.dequeue();
      } else {
        queue.enqueue(queue.dequeue());
      }
    }
  }
  return queue.front();
}

console.log(fn(4, 4));
